package dao.impl;

import dao.PrescricaoDAO;
import excecao.ObjetoDuplicadoException;
import excecao.ObjetoNaoEncontradoException;
import java.util.ArrayList;
import java.util.List;
import modelo.Prescricao;

public class MemoryPrescricaoDAO implements PrescricaoDAO {

    // Banco
    private ArrayList<Prescricao> lista;
    private long seq;

    public MemoryPrescricaoDAO() {
        lista = new ArrayList<Prescricao>();
        seq = 0;
    }

    public void inclui(Prescricao umaPrescricao) throws ObjetoDuplicadoException {

        for (Prescricao prescricao : lista) {
            if (prescricao.igual(umaPrescricao)) {
                throw new ObjetoDuplicadoException();
            }
        }

        umaPrescricao.setId(++seq);
        lista.add(umaPrescricao);
    }

    public void altera(Prescricao umaPrescricao) throws ObjetoNaoEncontradoException {
        boolean achou = false;

        for (Prescricao prescricao : lista) {
            if (prescricao.igual(umaPrescricao)) {
                umaPrescricao.setId(prescricao.getId());
                lista.remove(prescricao);
                lista.add(umaPrescricao);
                achou = true;
                break;
            }
        }

        if (!achou) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public void exclui(Prescricao umaPrescricao) throws ObjetoNaoEncontradoException {

        if (!lista.remove(umaPrescricao)) {
            throw new ObjetoNaoEncontradoException();
        }

    }

    public Prescricao recuperaUmaPrescricao(long idPrescricao) throws ObjetoNaoEncontradoException {
        Prescricao umaPrescricao = new Prescricao();
        umaPrescricao.setId(idPrescricao);
        for (Prescricao prescricao : lista) {
            if (prescricao.igual(umaPrescricao)) {
                return prescricao;
            }
        }


        throw new ObjetoNaoEncontradoException();
    }

    public List<Prescricao> recuperaPrescricoes() {
        return lista;

    }
}
